package com.itbaizhan.controller;

import com.itbaizhan.domain.Result;
import com.itbaizhan.domain.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/*从前端页面获取数据，传进来*/
/*如果一个控制器类下的 所有 控制器方法都返回JSON格式数据且不进行跳转页面，
(当@ResponseBoby 要作用于类中所有方法时，就要用到@RestController)
可以使用@RestController代替@Controller，
此时每个方法上的@ResponseBody都可以省略。*/
//@Controller
@RestController
@RequestMapping("/c8")
public class MyController8json {

    /*
    @GetMapping("/addstudent")
    public @ResponseBody Result addStudent(String name, String sex){
        //输出接收的参数，模拟添加学生
        System.out.println(name+":"+sex);
        //返回结果对象
        Result result = new Result(true,"添加成功");
        return result;
    }*/

    @GetMapping("/addstudent")
    //@ResponseBody   使用@RestController代替@Controller,可以省略@ResponseBody
    public  Result addStudent2(String name, String sex){
        //输出接收的参数，模拟添加学生
        System.out.println(name+":"+sex);
        //返回结果对象
        Result result = new Result(true,"添加成功");
        return result;
    }

    @PostMapping("/addstudent2")
    //@RequestBody
    // 作用：将请求中JSON格式的参数转为JAVA对象
    //位置：写在方法参数前    参数要写类（对象）
    public  Result addStudent3(@RequestBody Student student){
        //输出接收的参数，模拟添加学生
        System.out.println(student);
        //返回结果对象
        Result result = new Result(true,"添加成功");
        return result;
    }

}
/*@ResponseBody
*作用：方法返回的对象转换为JSON格式，并将JSON数据直接写入到输出流中，
* 使用此注解后不会再经过视图解析器。使用该注解可以处理Ajax请求。
位置：方法上方或方法返回值前
*
* 编写jsp页面，发送ajax请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>ajax请求</title>
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script>
      $(function () {
        $("#btn").click(function () {
          var name = $("#name").val();
          var sex = $("#sex").val();
          $.get("/c8/addStudent",{"name":name,"sex":sex},function (data){
            console.log(data);
           });
         });
       });
    </script>
  </head>
  <body>
     姓名：<input id="name"/><br/>
     性别：<input id="sex"/><br/>
    <input type="button" value="提交" id="btn"/>
  </body>
</html>
由于jsp页面中引入jQuery的js文件，而SpringMVC会拦截所有资源，造成jquery.js失效，需要在SpringMVC核心配置文件中放行静态资源。

<!-- 放行静态资源  因为在web.xml过虑的所有资源，所以js文件拿不到，要在springmvc.xml（配置文件）中添加以下-->
<mvc:default-servlet-handler />
*
*
编写结果实体类，该实体类会封装一个请求的结果

// 请求的结果对象
public class Result {
  private boolean flag; // 请求是否成功
  private String message; // 请求提示信息
  // 省略getter/setter/构造方法
}
编写控制器

@PostMapping("/addStudent")
@ResponseBody
public Result addStudent(String name, String sex) {
  // 输出接受到的参数，模拟添加学生
  System.out.println(name+":"+sex);
  // 返回添加结果
  Result result = new Result(true, "添加学生成功！");
  return result;
}
SpringMVC会将Result对象转为JSON格式写入输出流，而SpringMVC默认使用的JSON转换器是jackson，需要在pom中添加jackson依赖。

<!-- jackson  版本用2.13.3 会报错 要用2.9.0-->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.0</version>
</dependency> */